package persistencia;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import negocio.Supervisor;
import negocio.Administrativo;

//TODO: falta agregar mas para que capa negocio se comunique con esta clase	de capa persistencia

public class AdministrativoDAO {


	private static AdministrativoDAO instancia;
	private final Connection c;
	
	private AdministrativoDAO()
	{
		c = BDManager.getInstance().getConexion();
	}

	public static AdministrativoDAO getInstance()
	{
		if(instancia ==null)
		{
			instancia = new AdministrativoDAO();
		}
		return instancia;
	}
	

	public void guardar(Administrativo usu)
	{
		String query = "INSERT INTO administrativo( dni, nombre, apellido, telefono, mail, nickname, contrasenia) VALUES"+ " ('" + usu.getDni() + "','" + usu.getNombre() +"','" + usu.getApellido() + "','" + usu.getTelefono() +"','"+ usu.getMail()+ "','" + usu.getNickname() + "','" + usu.getContrasenia() +"')";
		
		try {
			Statement s = c.createStatement();
			s.execute(query);
			s.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	//TODO: probar que funciona bien la ejecucion   
	public ArrayList<Administrativo> getAll()
	{
		String query = "SELECT * FROM administrativo";
		Statement s;
		ResultSet rs;
		ArrayList<Administrativo> res = new ArrayList<Administrativo>();
		try {
			s = c.createStatement();
			rs = s.executeQuery(query);
			while(rs.next())
			{
				res.add(new Administrativo(rs.getString(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getString(5), rs.getString(6), rs.getString(7), "foo") );
			}
			s.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return res;
	}

	
	
	//TODO: //			Usuario area = AreaDAO.getInstance().getArea(rs.getInt(1)); //A vaces se hace esto, al tener la tabla una fk foranea.
	public Administrativo getAdministrativo(String dni) 
	{
		String query = "SELECT * FROM administrativo WHERE dni=" + dni;
		Statement s;
		ResultSet rs;
		Administrativo res = null;
		try{
			s = c.createStatement();
			rs = s.executeQuery(query);
			rs.next();

			res= new Administrativo(rs.getString(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getString(5), rs.getString(6), rs.getString(7),"foo" );
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		return res;
	}
	
	
	
	
	  //SE devuelve Objeto, para luego comparar si permanece null la variable o no cuando se invoca este metodo.
	  public Administrativo buscarUser(String username, String password) throws SQLException {
	    String query = String.format(
	      "select * from administrativo where nickname = '%s' and contrasenia = '%s';",
	      username, password
	    );
	    Statement s = c.createStatement();
	    ResultSet rs = s.executeQuery(query);
	    
	    Administrativo dto = null;
	
	    if (rs.next()) {
	
	      dto = new Administrativo(rs.getString("dni"), rs.getString("nombre"), rs.getString("apellido"), rs.getInt("telefono"), rs.getString("mail"),rs.getString("nickname"), rs.getString("contrasenia"), "foo");
	    }
	    s.close();
	    return dto; //si no existe devuelve null
	  }


	  
	  
}
	